package Problem;

import java.util.ArrayList;

public abstract class Problem {
	/**
	 * 
	 * In this class we define the problem
	 * any problem consists of 5 tuples 
	 * 
	 * 1- Operators (Actions)
	 * 2- Initial State 
	 * 3- State Space (All states in the problem)
	 * 4- Goal Test 
	 * 5- Path cost
	 * 
	 */
	private ArrayList<String> operators;
	private Object initialState;
	private ArrayList<Object> StateSpace;

	public Problem(ArrayList<String> operators, Object initialState,
			ArrayList<Object> stateSpace) {

		this.operators= operators;
		this.initialState=initialState;
		this.StateSpace=stateSpace;
	}

	/**
	 * 
	 * @param k (Object) 
	 * The function checks if the input object is the goal or not
	 * 
	 */
	public abstract boolean goalTest(Object k);
	
	/**
	 *
	 * @param k (Object) 
	 * The function returns the path cost to this object
	 *
	 */
	
	public abstract int pathCost(Object k);



}
